/**
 * 公共验证器集合
 * @namespace validators
 */
export const validators = {
	/**
	 * 必填验证器
	 * @param {string} message - 验证失败时的提示信息
	 * @returns {Object} 验证规则对象
	 */
	required: (message) => ({ required: true, message, trigger: 'change' }),

	/**
	 * 正数验证器
	 * @param {string} message - 验证失败时的提示信息
	 * @returns {Object} 验证规则对象
	 */
	positiveNumber: (message) => ({
		validator: (_, value, callback) => {
			if (value && (isNaN(value) || value < 0)) {
				callback(new Error(message))
			} else {
				callback()
			}
		},
		trigger: 'blur',
	}),

	/**
	 * 正步长验证器
	 * @param {string} message - 验证失败时的提示信息
	 * @returns {Object} 验证规则对象
	 */
	positiveStep: (message) => ({
		validator: (_, value, callback) => {
			if (value && (isNaN(value) || value <= 0)) {
				callback(new Error(message))
			} else {
				callback()
			}
		},
		trigger: 'blur',
	}),

	/**
	 * 0-1范围验证器
	 * @param {string} message - 验证失败时的提示信息
	 * @returns {Object} 验证规则对象
	 */
	range01: (message) => ({
		validator: (_, value, callback) => {
			if (value !== null && (isNaN(value) || value < 0 || value > 1)) {
				callback(new Error(message))
			} else {
				callback()
			}
		},
		trigger: 'blur',
	}),

	/**
	 * 0-1步长验证器
	 * @param {string} message - 验证失败时的提示信息
	 * @returns {Object} 验证规则对象
	 */
	step01: (message) => ({
		validator: (_, value, callback) => {
			if (value !== null && (isNaN(value) || value <= 0 || value > 1)) {
				callback(new Error(message))
			} else {
				callback()
			}
		},
		trigger: 'blur',
	}),
}
/**
 * 表单配置信息
 * @namespace formConfig
 */
export const formConfig = {
	units: {
		temperature: ['phaseDiagram.units.kelvin'],
		pressure: [
			'phaseDiagram.units.pascal',
			'phaseDiagram.units.atm',
			'phaseDiagram.units.bar',
		],
		composition: [
			'phaseDiagram.units.moleFraction',
			'phaseDiagram.units.weightFraction',
		],
	},
}
